Extended Host callback interface IComponentHandler3 for an edit controller. More...
#include <ivstcontextmenu.h>
Public Member Functions | |
virtual IContextMenu * | createContextMenu (IPlugView *plugView, const ParamID *paramID)=0 |
Creates a host context menu for a Plug-in:
| |
Static Public Attributes | |
static const FUID | iid |
Extended Host callback interface IComponentHandler3 for an edit controller.
A Plug-in can ask the host to create a context menu for a given exported Parameter ID or a generic context menu.
The host may pre-fill this context menu with specific items regarding the parameter ID like "Show automation for parameter", "MIDI learn" etc...
The Plug-in can use the context menu in two ways :
Note: You can and should use this even if you don't add your own items to the menu as this is considered to be a big user value.
Adding Plug-in specific items to the context menu
class PluginContextMenuTarget : public IContextMenuTarget, public FObject { public: PluginContextMenuTarget () {} virtual tresult PLUGIN_API executeMenuItem (int32 tag) { // this will be called if the user has executed one of the menu items of the Plug-in. // It won't be called for items of the host. switch (tag) { case 1: break; case 2: break; } return kResultTrue; } OBJ_METHODS(PluginContextMenuTarget, FObject) DEFINE_INTERFACES DEF_INTERFACE (IContextMenuTarget) END_DEFINE_INTERFACES (FObject) REFCOUNT_METHODS(FObject) }; // The following is the code to create the context menu void popupContextMenu (IComponentHandler* componentHandler, IPlugView* view, const ParamID* paramID, UCoord x, UCoord y) { if (componentHandler == 0 || view == 0) return; FUnknownPtr<IComponentHandler3> handler (componentHandler); if (handler == 0) return; IContextMenu* menu = handler->createContextMenu (view, paramID); if (menu) { // here you can add your entries (optional) PluginContextMenuTarget* target = new PluginContextMenuTarget (); IContextMenu::Item item = {0}; UString128 ("My Item 1").copyTo (item.name, 128); item.tag = 1; menu->addItem (item, target); UString128 ("My Item 2").copyTo (item.name, 128); item.tag = 2; menu->addItem (item, target); target->release (); //--end of adding new entries // here the the context menu will be pop-up (and it waits a user interaction) menu->popup (x, y); menu->release (); } }
virtual IContextMenu* createContextMenu | ( | IPlugView * | plugView, | |
const ParamID * | paramID | |||
) | [pure virtual] |
Creates a host context menu for a Plug-in: